home *** CD-ROM | disk | FTP | other *** search
/ Programming Sound Cards / Programming Sound Cards.iso / sound_19 / chaos.c < prev    next >
Text File  |  1995-01-01  |  2KB  |  96 lines

  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. #define R_MIN 2.95
  5. #define R_MAX 4.0
  6.  
  7. void play( int );
  8.  
  9. void clear_screen();
  10. void draw_screen();
  11. void hide_cursor();
  12.  
  13. void do_chaos( r, f )
  14. double r;
  15. void (*f)();
  16. {
  17. int i,t;
  18. double x = .3;
  19.  
  20.         for ( i = 0; i < 250; i++ )
  21.             x = r*x*(1.0-x);
  22.         for ( ; ; )
  23.             {
  24.             x = r*x*(1.0-x);
  25.             t = 95.0*x;
  26.             (*f)( t );
  27.             if ( kbhit() )
  28.                 break;
  29.             }
  30. }
  31.  
  32. void play_chaos()
  33. {
  34. double r = (R_MAX + R_MIN)/2.0;
  35. double dr = (R_MAX - R_MIN)/500.0;
  36. double bigdr = dr*10.0;
  37. char outstr[40];
  38. int done = 0;
  39.  
  40.     while ( !done )
  41.         {
  42.         sprintf( outstr, "r = %f\r", r );
  43.         print_centered( outstr );
  44.         do_chaos( r, play );
  45.         switch( getch() )
  46.             {
  47.             case 27 :
  48.                 done = 1;
  49.                 break;
  50.  
  51.             case 0  :
  52.                 switch( getch() )
  53.                     {
  54.                     case 73 :
  55.                         r -= bigdr;
  56.                         if ( r < R_MIN )
  57.                             r = R_MIN;
  58.                         break;
  59.  
  60.                     case 81 :
  61.                         r += bigdr;
  62.                         if ( r > R_MAX )
  63.                             r = R_MAX;
  64.                         break;
  65.  
  66.                     case 72 :
  67.                         r -= dr;
  68.                         if ( r < R_MIN )
  69.                             r = R_MIN;
  70.                         break;
  71.  
  72.                     case 80 :
  73.                         r += dr;
  74.                         if ( r > R_MAX )
  75.                             r = R_MAX;
  76.                         break;
  77.  
  78.                     default :
  79.                         break;
  80.  
  81.                     }
  82.             default :
  83.                 break;
  84.             }
  85.         }
  86. }
  87.  
  88. void main()
  89. {
  90.  
  91.     clear_screen();
  92.     draw_screen();
  93.     play_chaos();
  94.     clear_screen();
  95. }
  96.